Tutorial Membuat Role dilaravel

Posted on 16 August 2024


Untuk mengimplementasikan pengaturan akses berdasarkan peran di Laravel, kamu bisa mengikuti langkah-langkah berikut:


1. Menambahkan Kolom Role ke Tabel Users

Jika belum ada, tambahkan kolom role pada tabel users. Kamu bisa menambahkan kolom ini melalui migrasi baru:

php artisan make:migration add_role_to_users_table --table=users

Kemudian, edit file migrasi yang baru dibuat di database/migrations/xxxx_xx_xx_add_role_to_users_table.php:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class AddRoleToUsersTable extends Migration
{
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->string('role')->default('user'); // Menambahkan kolom role dengan default value
        });
    }

    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('role');
        });
    }
}
Jalankan migrasi:
php artisan migrate

2. Buat seeder

Buat seeder untuk tabel users dengan perintah artisan berikut:

php artisan make:seeder UserSeeder
Kemudian edit seeder yang barusan dibuat
Edit file seeder yang baru dibuat di database/seeders/UserSeeder.php untuk memasukkan data pengguna dengan berbagairole.
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use App\Models\User;

class UserSeeder extends Seeder
{
    public function run()
    {
        // Create SuperAdmin
        User::create([
            'name' => 'SuperAdmin',
            'email' => 'superadmin@example.com',
            'password' => bcrypt('password'),
            'role' => 'superadmin', // Ensure this matches your role field
        ]);

        // Create Admin
        User::create([
            'name' => 'Admin',
            'email' => 'admin@example.com',
            'password' => bcrypt('password'),
            'role' => 'admin', // Ensure this matches your role field
        ]);

        // Create User
        User::create([
            'name' => 'User',
            'email' => 'user@example.com',
            'password' => bcrypt('password'),
            'role' => 'user', // Ensure this matches your role field
        ]);
    }
}

jalankan seeder untuk memasukan data ke database:

php artisan db:seed --class=UserSeeder

Jika kamu ingin mengatur tampilan di Blade views berdasarkan peran pengguna, kamu bisa melakukannya dengan kondisi @if di dalam file Blade. Berikut adalah cara melakukannya:

Pastikan kolom role di tabelusers sudah ada dan memiliki nilai yang sesuai superadmin, admin, user. Jika sudah ada, pastikan datanya benar. Jika belum ada, kamu bisa menambahkannya seperti yang dijelaskan sebelumnya.

Jika sudah gunakan kondisi Blade untuk menampilkan elemen yang berbeda berdasarkan peran pengguna.

Contoh Blade View (resources/views/Jurusan/index.blade.php):

@if (auth()->user()->role === 'superadmin' || auth()->user()->role === 'admin')
        <a href="{{ route('matakuliah.create') }}" class="btn btn-primary">Tambah Mata Kuliah</a>
        @endif
        @if (auth()->user()->role === 'superadmin')
        <a href="{{ route('matakuliah.trash') }}" class="btn btn-warning">Trash</a>
        @endif

kamu hanya perlu menyesuaikan untuk button yang akan di tampilkan.

Jika anda ingin menampilkan button hanya untukrole :

superadmin:
@if (auth()->user()->role === 'superadmin'
@endif
admin:
@if (auth()->user()->role === 'admin'
@endif

karna user hanya boleh melihat data dan tidak bisa mengakses crud kamu tidak perlu menambahkan @ifuntuk user.